#include "Thread.hpp"
#include <unordered_map>
#include <memory>

// version 1
// #define NUM 10
// using thread_ptr_t = std::shared_ptr<ThreadModule::Thread>;
// int main()
// {
    // //                   线程名字，     线程对象
    // std::unordered_map<std::string, thread_ptr_t> threads;
    // // 创建多线程
    // for(int i = 0;i < NUM;i++)
    // {
    //     // 构建线程对象
    //     thread_ptr_t t = std::make_shared<ThreadModule::Thread>([](){
    //         while(true)
    //         {
    //             std::cout << "hello world" << std::endl;
    //             sleep(1);
    //         }
    //     });
    //     threads[t->Name()] = t; // 容器操作
    // }
    // // 启动多个线程
    // for(auto& thread : threads)
    // {
    //     thread.second->Start();
    // }
    // // 等待多个线程
    // for(auto& thread : threads)
    // {
    //     thread.second->Join();
    // }

    // 构建线程对象
    // ThreadModule::Thread t([](){
    //     while(true)
    //     {
    //         std::cout << "hello world" << std::endl;
    //         sleep(1);
    //     }
    // });
    // t.Start();

    // std::cout << t.Name() << "is running" << std::endl;
    // sleep(2);

    // t.Stop();
    // std::cout << "Stop thread : " << t.Name()<< std::endl;
    // sleep(1);

    // t.Join();
    // std::cout << "Join thread : " << t.Name()<< std::endl;

//     return 0;
// }


// version 2    传参版本

void Count(int max)
{
    for (int i = 0; i < max; i++)
    {
        std::cout << "i == " << i << std::endl;
        sleep(1);
    }
}
int main()
{
    ThreadModule::Thread<int> t(Count, 10);
    t.Start();
    t.Join();
    return 0;
}